﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using HMS_Hospital_Team2._6.BL;
using HMS_Hospital_Team2._6.DA;

namespace HMS_Hospital_Team2._6.GUI
{
    public partial class UcNhanVien : UserControl
    {
        public UcNhanVien()
        {
            InitializeComponent();
        }

        bool checkbutton;
        HMSHospitalEntities context = new HMSHospitalEntities();
        NhanVienBL Nhanvien = new NhanVienBL();
        private void UcNhanVien_Load(object sender, EventArgs e)
        {//Load du lieu tu database len gridview  
            grcthongtinNV_NV.DataSource = Nhanvien.LoadDuLieuBL();
            //Load len combobox chuc vu
            cmbChucVu_NV.DataSource = Nhanvien.LoadChucVuBL();
            cmbChucVu_NV.DisplayMember = "TenChucVu";
            cmbChucVu_NV.ValueMember = "MaChucVu";
        }


        private void btnSua_NV_Click(object sender, EventArgs e)
        {
            //Chỉnh readonly = false cho tất cả các textfield và checkbox, combobox cho phep chinh sua.
            txtMaNV_NV.Properties.ReadOnly = false;
            txtHovaTen_NV.Properties.ReadOnly = false;
            cmbChucVu_NV.Enabled = false;
            cmbGioitinh_NV.Enabled = true;
            dateNgaysinh_NV.Properties.ReadOnly = false;
            txtDiDong_NV.Properties.ReadOnly = false;
            txtTenDangNhap_NV.Properties.ReadOnly = false;
            txtMatkhau_NV.Properties.ReadOnly = false;
            chkNhanvienNL_NV.Properties.ReadOnly = true;
            chkNhanvienTT_NV.Properties.ReadOnly = true;
            chkAdmin_NV.Properties.ReadOnly = true;
            chkTrangThai_NV.Properties.ReadOnly = false;

            //Enable nut Luu va Lam Moi
            btnLuu_NV.Enabled = true;
            btnLamMoi_NV.Enabled = false;
            btnTaomoi_DV.Enabled = false;
            btnSua_NV.Enabled = false;
            //danh dau ng dung dang su dung chuc nang chinh sua
            checkbutton = false;
        }

        private void btnTaomoi_DV_Click(object sender, EventArgs e)
        {
            LamMoi();
            //Nut tao moi dc nhan dau tien.
            grcThongtinchung_NV.Enabled = true;
            grcPhanQuyen_NV.Enabled = true;
            btnSua_NV.Enabled = false;
            //nut tao moi dc nhan sau khi ng dung cho xem chi tiết
            txtMaNV_NV.Properties.ReadOnly = false;
            txtHovaTen_NV.Properties.ReadOnly = false;
            cmbGioitinh_NV.Enabled = true;
            dateNgaysinh_NV.Properties.ReadOnly = false;
            cmbChucVu_NV.Enabled = true;
            txtDiDong_NV.Properties.ReadOnly = false;
            txtDienThoaiBan_NV.Properties.ReadOnly = false;
            txtTenDangNhap_NV.Properties.ReadOnly = false;
            txtMatkhau_NV.Properties.ReadOnly = false;
            chkNhanvienNL_NV.Properties.ReadOnly = false;
            chkNhanvienTT_NV.Properties.ReadOnly = false;
            chkTrangThai_NV.Properties.ReadOnly = false;
            btnLuu_NV.Enabled = true;
            btnLamMoi_NV.Enabled = true;
            LamMoi();

            //danh dau ng dung dang su dung chuc nang tao moi
            checkbutton = true;
        }

        void LamMoi()
        {
            //Lam moi cac textfield va cac combobox, checkbox...
            txtMaNV_NV.Text = "";
            txtHovaTen_NV.Text = "";
            cmbGioitinh_NV.SelectedIndex = 0;
            dateNgaysinh_NV.Text = "";
            cmbChucVu_NV.SelectedIndex = 0;
            txtDiDong_NV.Text = "";
            txtTenDangNhap_NV.Text = "";
            txtMatkhau_NV.Text = "";
            chkNhanvienNL_NV.Checked = false;
            chkNhanvienTT_NV.Checked = false;
            chkTrangThai_NV.Checked = false;
            txtDienThoaiBan_NV.Text = "";
            txtMaNV_NV.Focus();
        }
        private void btnLamMoi_NV_Click(object sender, EventArgs e)
        {
            LamMoi();
        }
        //Ham them moi nhan vien
        void ThemMoiNhanVien()
        {
            Encrypt md5 = new Encrypt();

            string sMaNhanVien = txtMaNV_NV.Text;
            string sHoVaTen = txtHovaTen_NV.Text;
            string sdidong = txtDiDong_NV.Text;
            string sdienthoaiban = txtDienThoaiBan_NV.Text;
            int iMaChucVu = (int)cmbChucVu_NV.SelectedValue;
            DateTime daNgaySinh = dateNgaysinh_NV.DateTime;
            string sTenDangNhap = txtTenDangNhap_NV.Text;
            string sMatKhau;//ma hoa password
            sMatKhau = md5.congdongcsharp_Encrypt("Encrypt", txtMatkhau_NV.Text);
            //Xet Quyen cho nhan vien
            int iquyen;
            if ( iMaChucVu == 1)
            {
                iquyen = 1;
            }
            else
            {
                if (iMaChucVu == 2)
                    iquyen = 2;
                else
                    iquyen = 3;
            }

            //xet Gioi tinh
            bool blGioiTinh;
            if (cmbGioitinh_NV.SelectedIndex == 1)
                blGioiTinh = false;
            else
                blGioiTinh = true;

            //Xet trang thai
            bool blTrangThai = true;
            if (chkTrangThai_NV.Checked == true)
            {
                blTrangThai = true;
            }
            if (chkTrangThai_NV.Checked == false)
            {
                blTrangThai = false;
            }
            BL.NhanVienBL.ThemMoiNhanVien(sMaNhanVien, sHoVaTen,sdidong,sdienthoaiban,blGioiTinh,daNgaySinh,iMaChucVu
            ,sTenDangNhap,sMatKhau,iquyen,blTrangThai);
        }

        //hàm cập nhật thông tin nhân viên
        void CapNhatThongTinNV()
        {
            Encrypt md5 = new Encrypt();
            //lấy mã nhân viên cần chỉnh sửa
            string sMaNhanVien = (string)grdThongTinNV_NV.GetRowCellValue(grdThongTinNV_NV.FocusedRowHandle, grdThongTinNV_NV.Columns[0]);
            string sHoVaTen = txtHovaTen_NV.Text;
            string sDidong = txtDiDong_NV.Text;
            string sdienthoaiban = txtDienThoaiBan_NV.Text;
            DateTime daNgaySinh = dateNgaysinh_NV.DateTime;
            int iMaChucVu = (int)cmbChucVu_NV.SelectedValue;
            string sTenDangNhap = txtTenDangNhap_NV.Text;
            string sMatKhau;//ma hoa password
            sMatKhau = md5.congdongcsharp_Encrypt("Encrypt", txtMatkhau_NV.Text);
            bool blGioiTinh;
            if (cmbGioitinh_NV.SelectedIndex == 1)
                blGioiTinh = false;
            else
                blGioiTinh = true;

            //Xet Quyen cho nhan vien
            int iquyen;
            if (iMaChucVu == 1)
            {
                iquyen = 1;
            }
            else
            {
                if (iMaChucVu == 2)
                    iquyen = 2;
                else
                    iquyen = 3;
            }
            //xet trang thai
            bool blTrangThai = true;
            if (chkTrangThai_NV.Checked == true)
            {
                blTrangThai = true;
            }
            if (chkTrangThai_NV.Checked == false)
            {
                blTrangThai = false;
            }
            BL.NhanVienBL.CapnhatthongtinNV(sMaNhanVien, sHoVaTen, sDidong, sdienthoaiban, blGioiTinh, daNgaySinh, iMaChucVu
            , sTenDangNhap, sMatKhau, iquyen, blTrangThai);
        }
        //Ham xu li nut Luu
        private void btnLuu_NV_Click(object sender, EventArgs e)
        {
            while (kiemtraloi() == true)
            {
                if (checkbutton == true)//khi ng dung su dung chuc nang tao moi
                {
                    ThemMoiNhanVien();
                    MessageBox.Show("Thêm mới thành công!", "Thông báo!", MessageBoxButtons.OK);
                }
                else//khi ng dung su dung chuc nang chinh sua
                {
                    CapNhatThongTinNV();
                    MessageBox.Show("Sửa thành công!", "Thông báo!", MessageBoxButtons.OK);
                }
                grcthongtinNV_NV.DataSource = Nhanvien.LoadDuLieuBL();
                btnSua_NV.Enabled = true;
                btnTaomoi_DV.Enabled = true;
                LoadThongTinNhanVien();
                break;
            }
        }

        //Hàm xử lý sự kiện load thong tin nhân vien 
        public void LoadThongTinNhanVien()
        {
            Encrypt md5 = new Encrypt();
            //Enable 2 bảng bên phải.
            grcThongtinchung_NV.Enabled = true;
            grcPhanQuyen_NV.Enabled = true;
            btnLuu_NV.Enabled = false;
            btnLamMoi_NV.Enabled = false;

            //Chỉnh readonly = true cho tất cả các textfield và checkbox, combobox chi cho phep xem.
            txtMaNV_NV.Properties.ReadOnly = true;
            txtHovaTen_NV.Properties.ReadOnly = true;
            cmbGioitinh_NV.Enabled = false;
            cmbChucVu_NV.Enabled = false;
            dateNgaysinh_NV.Properties.ReadOnly = true;
            txtDiDong_NV.Properties.ReadOnly = true;
            txtTenDangNhap_NV.Properties.ReadOnly = true;
            txtMatkhau_NV.Properties.ReadOnly = true;
            txtDienThoaiBan_NV.Properties.ReadOnly = true;
            chkNhanvienNL_NV.Properties.ReadOnly = true;
            chkNhanvienTT_NV.Properties.ReadOnly = true;
            chkTrangThai_NV.Properties.ReadOnly = true;
            using (HMSHospitalEntities show = new HMSHospitalEntities())
            {
                // Load thong tin chi tiet cua dong dang chon.
                string sManv = (string)grdThongTinNV_NV.GetRowCellValue(grdThongTinNV_NV.FocusedRowHandle, grdThongTinNV_NV.Columns[0]);
                var ThongTin = (from tt in show.NhanViens
                                where tt.MaNhanVien == sManv
                                select tt).First<NhanVien>();
                txtMaNV_NV.Text = ThongTin.MaNhanVien;
                txtHovaTen_NV.Text = ThongTin.HoVaTen;
                txtDiDong_NV.Text = ThongTin.DiDong;
                txtDienThoaiBan_NV.Text = ThongTin.DienThoaiBan;
                txtTenDangNhap_NV.Text = ThongTin.TenDangNhap;
                txtMatkhau_NV.Text = ThongTin.MatKhau;
                txtMatkhau_NV.Text = md5.congdongcsharp_Decrypt("Encrypt", ThongTin.MatKhau);

                //Kiem tra gioi tinh trong database de load len combobox
                if (ThongTin.GioiTinh == false)
                    cmbGioitinh_NV.SelectedIndex = 1;// 1 là Nữ
                else
                    cmbGioitinh_NV.SelectedIndex = 0;// 0 là Nam
                cmbChucVu_NV.SelectedValue = ThongTin.MaChucVu;
                dateNgaysinh_NV.DateTime = ThongTin.NgaySinh.Value;

                //Kiem tra quyen trong database va load len checkbox.
                if (ThongTin.MaChucVu == 1)//1 la nhan vien nhap lieu.
                {
                    chkNhanvienTT_NV.Checked = false;
                    chkNhanvienNL_NV.Checked = true;
                    chkAdmin_NV.Checked = false;
                }
                else//2 la nhan vien thu tien
                {
                    if (ThongTin.MaChucVu == 2)
                    {
                        chkNhanvienNL_NV.Checked = false;
                        chkNhanvienTT_NV.Checked = true;
                        chkAdmin_NV.Checked = false;
                    }
                    else
                    {
                        chkNhanvienNL_NV.Checked = false;
                        chkNhanvienTT_NV.Checked = false;
                        chkAdmin_NV.Checked = true;
                    }
                }

                //Kiem tra trang thai trong database
                if (ThongTin.TrangThai == true)
                    chkTrangThai_NV.Checked = true;
                else
                    chkTrangThai_NV.Checked = false;
            }
        }
        private void grdThongTinNV_NV_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            LoadThongTinNhanVien();
            btnSua_NV.Enabled = true;
        }

        //xử ký chỉ cho người dùng nhập số trong trường số điện thoại.
        private void txtDienthoai_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsNumber(e.KeyChar) && !Char.IsControl(e.KeyChar))
                e.Handled = true;
        }

        //xử ký chỉ cho người dùng nhập chữ trong trường họ và tên.
        private void txtHovaTen_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsLetterOrDigit(e.KeyChar) && !Char.IsControl(e.KeyChar) && !Char.IsWhiteSpace(e.KeyChar))
                e.Handled = true;
        }

        //xử ký chỉ cho người dùng nhập chữ và số trong trường tên đăng nhập
        private void txtTenDangNhap_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar)&& !Char.IsNumber(e.KeyChar))
                e.Handled = true;
        }
        ////xử ký chỉ cho người dùng nhập số và ký tự '-'và '/' trong trường ngày sinh
        private void dateNgaysinh_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsControl(e.KeyChar) || !Char.IsNumber(e.KeyChar) || e.KeyChar == '-' || e.KeyChar == '/')
                e.Handled = false;
            else
                e.Handled = true;
        }


        public bool kiemtraloi()
        {
            int count = 0;//bien dem loi
            bool blhvt = false, blngaysinh = false, bldienthoai = false, bltendn = false, blmatkhau = false;//bien danh dau loi.
            if (txtHovaTen_NV.Text.Trim() == "")//bat loi ng dung chua nhap ho va ten
            {
                blhvt = true;//danh dau vung bi loi
                count++;//tang bien dem
                
            }
            if (dateNgaysinh_NV.Text == "")//bắt lỗi ng dùng chưa nhập ngày sinh
            {
                blngaysinh = true;
                count++;
            }
            if (txtDienThoaiBan_NV.Text.Trim() == "" && txtDiDong_NV.Text.Trim() == "")//bắt lỗi ng dùng chưa nhập số điện thoại
            {
                bldienthoai = true;
                count++;
            }
            if (txtTenDangNhap_NV.Text.Trim() == "")//bắt lỗi ng dùng chưa nhập tên đăng nhập
            {
                bltendn = true;
                count++;
            }
            if (txtMatkhau_NV.Text.Trim() == "")//bắt lỗi ng dùng chưa nhập mật khẩu.
            {
                blmatkhau = true;
                count++;
            }
            if (count == 0)
            {
                return true;
            }
            else
            {
                if (count > 1)//trường hợp có nhiều hơn 2 lỗi.
                {
                    MessageBox.Show("Vui lòng nhập đầy đủ thông tin vào các trường có dấu '*'", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else//trường hợp 1 lỗi.
                {
                    if (blhvt == true)
                    {
                        MessageBox.Show("Vui lòng nhập Họ và Tên!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtHovaTen_NV.Focus();
                    }
                    if (bldienthoai == true)
                    {
                        MessageBox.Show("Vui lòng nhập 1 trong 2 số điện thoại!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtDiDong_NV.Focus();
                    }
                    if (blngaysinh == true)
                    {
                        MessageBox.Show("Vui lòng chọn ngày sinh!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        dateNgaysinh_NV.Focus();
                    }
                    if (bltendn == true)
                    {
                        MessageBox.Show("Vui lòng nhập tên đăng nhập!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtTenDangNhap_NV.Focus();
                    }
                    if (blmatkhau == true)
                    {
                        MessageBox.Show("Vui lòng nhập mật khẩu!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtMatkhau_NV.Focus();
                    }
                }
                return false;
            }
        }
        //Ham tu động chọn quyền khi chọn chức vụ.
        private void cmbChucVu_NV_SelectedIndexChanged(object sender, EventArgs e)
        {
            int iMaChucVu = cmbChucVu_NV.SelectedIndex;
            if (iMaChucVu == 0)
            {
                chkNhanvienTT_NV.Checked = false;
                chkNhanvienNL_NV.Checked = true;
                chkAdmin_NV.Checked = false;
            }
            else
            {
                if (iMaChucVu == 1)
                {
                    chkNhanvienNL_NV.Checked = false;
                    chkNhanvienTT_NV.Checked = true;
                    chkAdmin_NV.Checked = false;
                }
                else
                {
                    chkNhanvienNL_NV.Checked = false;
                    chkNhanvienTT_NV.Checked = false;
                    chkAdmin_NV.Checked = true;
                }
            }
        }
    }
}
